const FeedbackModel = require('../models/feedbackModel');
const { validateRequiredFields } = require('../utils/helpers');

class FeedbackController {
  // 提交反馈（小程序端）
  static async addFeedback(req, res) {
    try {
      validateRequiredFields(req.body, ['openid', 'content']);
      
      const { openid, content, contact = '' } = req.body;
      
      if (content.length > 500) {
        return res.status(400).json({
          code: 400,
          msg: '反馈内容不能超过500个字符'
        });
      }
      
      const feedback = await FeedbackModel.addFeedback(openid, content, contact);
      
      res.json({
        code: 200,
        msg: '反馈提交成功',
        data: feedback
      });
    } catch (error) {
      console.error('提交反馈失败:', error);
      res.status(500).json({
        code: 500,
        msg: error.message || '服务器错误'
      });
    }
  }

  // 获取反馈列表（管理端）
  static async getFeedbackList(req, res) {
    try {
      const { page = 1, pageSize = 20, status = '' } = req.query;
      
      const result = await FeedbackModel.getFeedbackList(
        parseInt(page),
        parseInt(pageSize),
        status
      );
      
      res.json({
        code: 200,
        msg: '获取成功',
        data: result
      });
    } catch (error) {
      console.error('获取反馈列表失败:', error);
      res.status(500).json({
        code: 500,
        msg: error.message || '服务器错误'
      });
    }
  }

  // 更新反馈状态（管理端）
  static async updateFeedbackStatus(req, res) {
    try {
      const { id } = req.params;
      const { status, reply = '' } = req.body;
      
      if (!id) {
        return res.status(400).json({
          code: 400,
          msg: '缺少反馈ID'
        });
      }
      
      if (!['待处理', '已处理', '已忽略'].includes(status)) {
        return res.status(400).json({
          code: 400,
          msg: '无效的状态值'
        });
      }
      
      await FeedbackModel.updateFeedbackStatus(id, status, reply);
      
      res.json({
        code: 200,
        msg: '更新成功'
      });
    } catch (error) {
      console.error('更新反馈状态失败:', error);
      res.status(500).json({
        code: 500,
        msg: error.message || '服务器错误'
      });
    }
  }

  // 删除反馈（管理端）
  static async deleteFeedback(req, res) {
    try {
      const { id } = req.params;
      
      if (!id) {
        return res.status(400).json({
          code: 400,
          msg: '缺少反馈ID'
        });
      }
      
      await FeedbackModel.deleteFeedback(id);
      
      res.json({
        code: 200,
        msg: '删除成功'
      });
    } catch (error) {
      console.error('删除反馈失败:', error);
      res.status(500).json({
        code: 500,
        msg: error.message || '服务器错误'
      });
    }
  }

  // 获取用户反馈列表（小程序端）
  static async getUserFeedbacks(req, res) {
    try {
      const { openid } = req.query;
      const { page = 1, pageSize = 20 } = req.query;
      
      if (!openid) {
        return res.status(400).json({
          code: 400,
          msg: '缺少用户标识'
        });
      }
      
      const result = await FeedbackModel.getUserFeedbacks(
        openid,
        parseInt(page),
        parseInt(pageSize)
      );
      
      res.json({
        code: 200,
        msg: '获取成功',
        data: result
      });
    } catch (error) {
      console.error('获取用户反馈列表失败:', error);
      res.status(500).json({
        code: 500,
        msg: error.message || '服务器错误'
      });
    }
  }
}

module.exports = FeedbackController;

